/*
 * UnitVisitor.h
 *
 *  Created on: Nov 3, 2008
 *      Author: Ryan
 */

#ifndef UNITVISITOR_H_
#define UNITVISITOR_H_

namespace OOInterface
{

//Forward declare all of the classes that this Visitor can visit.
class Unit;
class AirAspect;
class LandAspect;
class WaterAspect;
class BuilderAspect;
class BuildingAspect;
class TransportAspect;
class ReclaimableAspect;
class ResourceExtractorAspect;

class UnitVisitor
{
public:

	virtual void visitUnit( const Unit& u ) = 0;

	virtual void visitAirAspect( const AirAspect& a ) = 0;
	virtual void visitLandAspect( const LandAspect& a ) = 0;
	virtual void visitWaterAspect( const WaterAspect& a ) = 0;

	virtual void visitBuilderAspect( const BuilderAspect& a ) = 0;
	virtual void visitBuildingAspect( const BuildingAspect& a ) = 0;
	virtual void visitTransportAspect( const TransportAspect& a ) = 0;

	virtual void visitReclaimableAspect( const ReclaimableAspect& a ) = 0;
	virtual void visitResourceExtractorAspect( const ResourceExtractorAspect& a ) = 0;
};

}

#endif /* UNITVISITOR_H_ */
